package com.yanggu.flink.datastream_api.partition

import org.apache.flink.streaming.api.scala._

/**
 * 随机分区服从均匀分布（uniform distribution），所以可以把流中的数据随机打乱，均匀地传递到下游任务分区。
 * 因为是完全随机的，所以对于同样的输入数据, 每次执行得到的结果也不会相同
 * 上游算子并行度为1, 下游为4，上游算子的数据会随机发送到下游，每次执行的结果都不同
 */
//shuffle:4> 5
//shuffle:2> 4
//shuffle:3> 3
//shuffle:1> 1
//shuffle:1> 2
object ShuffleDemo {

  def main(args: Array[String]): Unit = {
    // 创建执行环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(1)
    // 读取数据源，并行度为 1
    val stream = env.fromElements(1, 2, 3, 4, 5)
    // 经洗牌后打印输出，并行度为 4
    stream
      .shuffle
      .print("shuffle").setParallelism(4)

    env.execute()
  }

}
